# 字典
# 使用 {} 来创建字典
d = {} # 创建了一个空字典
# 创建一个保护有数据的字典
# 语法：
#   {key:value,key:value,key:value}
#   字典的值可以是任意对象
#   字典的键可以是任意的不可变对象（int、str、bool、tuple ...），但是一般我们都会使用str
#       字典的键是不能重复的，如果出现重复的后边的会替换到前边的
d = dict([('name','孙悟饭'),('age',18)])
# d = {'name':'孙悟空' , 'age':18 , 'gender':'男' , 'name':'sunwukong'}
# d = {
# 'name':'孙悟空' ,
# 'age':18 ,
# 'gender':'男' ,
# 'name':'sunwukong'
# }
#
# print(d.get("a"))

# d = dict(name='孙悟空',age=18,gender='男')
# d = dict([('name',"zhangsan"),("age","12")])
# print(len(d))
# print("name" in d)
# print(d.get("hello","111"))
# d["hello"] = "lisi"
# d[key] = value 如果key存在则覆盖，不存在则添加
# result = d.setdefault('name1','猪八戒')
# print(result)
# print(d)
# setdefault(key[, default]) 可以用来向字典中添加key-value
#   如果key已经存在于字典中，则返回key的值，不会对字典做任何操作
#   如果key不存在，则向字典中添加这个key，并设置value 将当前的value作为方法返回值进行返回
# print(d.setdefault("name","猪八戒"))
# print(d.setdefault("hello","猪八戒"))


# d = {'a':1,'b':2,'c':3}
# d2 = {'d':4,'e':5,'f':6, 'a':7}
# d.update(d2)
# print(d,type(d))  # 批量将一个字典加入到另一个字典
# # 删除，可以使用 del 来删除字典中的 key-value
# # popitem()
# # 随机删除字典中的一个键值对，一般都会删除最后一个键值对
# #   删除之后，它会将删除的key-value作为返回值返回
# #   返回的是一个元组，元组中有两个元素，第一个元素是删除的key，第二个是删除的value
# print(d)
# [a,b] = d.popitem()
# print(b)

# pop(key[, default])
# 根据key删除字典中的key-value
# 会将被删除的value返回！
# 如果删除不存在的key，会抛出异常
#   如果指定了默认值，再删除不存在的key时，不会报错，而是直接返回默认值
s = d.pop("name","111")
print(s)

# copy()
# 该方法用于对字典进行浅复制
# 复制以后的对象，和原对象是独立，修改一个不会影响另一个
# 注意，浅复制会简单复制对象内部的值，如果值也是一个可变对象，这个可变对象不会被复制
# d = {'a':1,'b':2,'c':3}
# d2 = d.copy()
# d["a"] = "2222"
# print(d2)
# d = {'a':{'name':'孙悟空','age':18},'b':2,'c':3}
# d2 = d.copy()
# d2["a"]["name"] = "zhubajie"
# print('d = ',d , id(d))
# print('d2 = ',d2 , id(d2))

d = {'name':'孙悟空','age':18,'gender':'男'}
# for k in d.keys() :
#     print(k,d[k])

# values()
# 该方法会返回一个序列，序列中保存有字典的左右的值
# for v in d.values():
#     print(v)

#
for k,v in d.items():
    print(k,v)